package cn.tedu.charging.order.controller;

import cn.tedu.charging.common.pojo.JsonResult;
import cn.tedu.charging.order.pojo.param.OrderAddParam;
import cn.tedu.charging.order.service.OrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/order")
@Slf4j
@Api(tags = "订单接口")
public class OrderController {
    /**
     * DTO 数据传输对象 前端把数据传输给了后端的Controller
     * 服务器之间调用 A服务 调用 B服务 A和B都是后端服务
     * DTO是A和B之间传递的载体
     * param 前端调用后端
     * 从功能上讲 用一个O 来表示各层的传输对象是没问题的
     * 为了解耦 把每层都独立出来
     * 创建订单 OrderAddParam OrderCreateParam
     * 更新订单 OrderUpdateParam
     * 查询订单 OrderQueryParam
     *
     *
     * RESTFul 接口调用的方法规范
     * 希望接口按照 http的请求方式 POST GET PUT DELETE
     *来吹资源 R resource
     *CRUD
     *R read get 查询
     *C create post 创建
     *U update put 修改
     *D delete delete 删除
     *
     * 调用方法 退化简化 只用 GET POST
     * 查询 GET
     * 增加 修改 删除 POST
     *
     * 接口URL 该如何定义？
     * 资源/动作
     * C 创建订单 /order/create
     * R 查询订单列表 /order/list 查询订单详情 /order/detail
     * U 修改订单 /order/update
     * D 删除订单 /order/delete/{orderNo}
     *
     * @return
     */

    @Autowired
    private OrderService orderService;
    @ApiOperation("创建订单")
    @PostMapping("create")
    public JsonResult<String> create(@RequestBody OrderAddParam orderAddParam){
        log.info("创建订单：{}", orderAddParam);
        String orderNo = orderService.createOrder(orderAddParam);


        return JsonResult.ok(orderNo, "创建订单成功");
    }
}
